package com.atguigu.tingshu.album.service;

import com.atguigu.tingshu.model.album.TrackInfo;
import com.atguigu.tingshu.query.album.TrackInfoQuery;
import com.atguigu.tingshu.vo.album.AlbumTrackListVo;
import com.atguigu.tingshu.vo.album.TrackInfoVo;
import com.atguigu.tingshu.vo.album.TrackListVo;
import com.atguigu.tingshu.vo.album.TrackStatMqVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

public interface TrackInfoService extends IService<TrackInfo> {

    /**
     * 将音视频文件上传腾讯云点播平台
     *
     * @param file 文件
     * @return {"mediaFileId":"音视频文件唯一标识","mediaUrl":"音视频文件播放地址"}
     */
    Map<String, String> uploadTrack(MultipartFile file);


    /**
     * 保存声音
     *
     * @param userId
     * @param trackInfoVo
     */
    void saveTrackInfo(Long userId, TrackInfoVo trackInfoVo);

    /**
     * 保存声音统计信息
     *
     * @param trackId
     * @param statType
     * @param num
     */
    void saveTrackStat(Long trackId, String statType, int num);

    /**
     * 分页获取声音列表
     *
     * @param pageInfo       分页对象
     * @param trackInfoQuery 查询条件
     * @return
     */
    Page<TrackListVo> getUserTrackPage(Page<TrackListVo> pageInfo, TrackInfoQuery trackInfoQuery);

    /**
     * 删除声音
     *
     * @param id
     * @return
     */
    void removeTrackInfo(Long id);

    /**
     * 更新声音信息
     *
     * @param id
     * @param trackInfo
     * @return
     */
    void updateTrackInfo(TrackInfo trackInfo);

    /**
     * 分页展示专辑下声音列表-动态显示付费标识
     * 根据用户登录状态、身份、专辑付费类型、购买情况综合判断付费标识
     *
     * @param pageInfo
     * @param userId
     * @param albumId
     * @return
     */
    Page<AlbumTrackListVo> getAlbumTrackPage(Page<AlbumTrackListVo> pageInfo, Long userId, Long albumId);

    /**
     * 更新声音统计信息
     * @param trackStatMqVo
     */
    void updateTrackStat(TrackStatMqVo trackStatMqVo);

    /**
     * 根据选择待购声音作为购买起始声音得到分集购买列表
     *
     * @param trackId 选择付费标识声音-作为起始购买声音
     * @return [{name:"本集",price:1,trackCount:1},{name:"后10集",price:10,trackCount:10},{}.,{name:"全集",price:33,trackCount:33}]
     */
    List<Map<String, Object>> getFenJiBuyList(Long userId, Long trackId);

    /**
     * 基于选择购买声音ID返回当前用户待结算声音列表
     * @param userId 用户ID
     * @param trackId 选中声音ID（起始购买声音ID）
     * @param trackCount 购买数量
     * @return 与购买数量对应数量声音集合
     */
    List<TrackInfo> getWaitBuyTrackInfoList(Long userId, Long trackId, int trackCount);
}
